////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afsoftwarestatelements.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AFSOFTWARESTATELEMENTS_H
#define AFSOFTWARESTATELEMENTS_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "afglobalelements.h"

#define AFSOFTWARESTATELEMENTS_NAMESPACE_BEGIN namespace afsoftwarestatelements {
#define AFSOFTWARESTATELEMENTS_NAMESPACE_END }

AFSOFTWARESTATELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFVFESoftwareIIRHighPassType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAFVFESoftwareIIRHighPassType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filterCoeffA - Array
    ///
    /// Description:   High pass IIR filter coeffs used for focus value calculation. For 2x6 kernel, all 6 parameters are
    ///                configurable.
    /// Range:         [-16,15]
    /// Length:        6
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 filterCoeffA[6];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filterCoeffB - Array
    ///
    /// Description:   High pass IIR filter coeffs used for focus value calculation. For 2x6 kernel, all 6 parameters are
    ///                configurable.
    /// Range:         [-16,15]
    /// Length:        6
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 filterCoeffB[6];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FVMinHigh
    ///
    /// Description:   Minimum FV value to be accumulated with respect to the filter. Effect: Higher value will result in a
    ///                sharper FV curve but it might filter out low contrast context or missing peak. Lower Value will have
    ///                flatter curve due to noise.
    /// Range:         [0.0,5.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT FVMinHigh;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FVMinLow
    ///
    /// Description:   Minimum FV value to be accumulated with respect to the filter. Effect: Higher value will result in a
    ///                sharper FV curve but it might filter out low contrast context or missing peak. Lower Value will have
    ///                flatter curve due to noise.
    /// Range:         [0.0,5.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT FVMinLow;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coefficientlength
    ///
    /// Description:   Length of the filter coefficients used. Constraints: Should not modify randomly; should match the filter
    ///                entries used. Effect: For different camera use case, different kernel is used.
    /// Range:         [3,6]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 coefficientlength;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFVFESoftwareFIRHighPassType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAFVFESoftwareFIRHighPassType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filterCoeffA - Array
    ///
    /// Description:   High pass FIR filter coeffs used for focus value calculation. For 1x11 kernel. Only 11 parameters are
    ///                configurable.
    /// Range:         [-16,15]
    /// Length:        11
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 filterCoeffA[11];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FVMinHigh
    ///
    /// Description:   Minimum FV value to be accumulated with respect to the filter. Effect: Higher value will result in a
    ///                sharper FV curve but it might filter out low contrast context or missing peak. Lower Value will have
    ///                flatter curve due to noise.
    /// Range:         [0.0,5.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT FVMinHigh;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FVMinLow
    ///
    /// Description:   Minimum FV value to be accumulated with respect to the filter. Effect: Higher value will result in a
    ///                sharper FV curve but it might filter out low contrast context or missing peak. Lower Value will have
    ///                flatter curve due to noise.
    /// Range:         [0.0,5.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT FVMinLow;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coefficientlength
    ///
    /// Description:   Length of the filter coefficients used. Constraints: Should not modify randomly; should match the filter
    ///                entries used. Effect: For different camera use case, different kernel is used.
    /// Range:         [11,11]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 coefficientlength;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFVFESoftwareHighPassType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAFVFESoftwareHighPassType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filterType
    ///
    /// Description:   Specify Choice of filter used for SW Stats. Data range: AFS_ON_IIR (1), AFS_ON_FIR (2). Constraints: DO
    ///                NOT USE AFS_OFF. Effect: Specifies to use FIR or IIR fitler.
    /// Range:         [1,2]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                                 filterType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FIR
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFVFESoftwareFIRHighPassType FIR;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// IIR
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFVFESoftwareIIRHighPassType IIR;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFTuningSoftwareStatisticsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAFTuningSoftwareStatisticsType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// parameter_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct parameter_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } parameter_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SWFilterDefault
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFVFESoftwareHighPassType SWFilterDefault;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SWFilterFace
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFVFESoftwareHighPassType SWFilterFace;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SWFilterLowLight
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFVFESoftwareHighPassType SWFilterLowLight;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SWFVMinimumLuxTriggerHigh
    ///
    /// Description:   Lux trigger to use normal FV_min. Effect: Lower value will activate normal light fv_min at a brighter
    ///                condition.
    /// Range:         [0,500]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                              SWFVMinimumLuxTriggerHigh;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SWFVMinimumLuxTriggerLow
    ///
    /// Description:   Lux trigger to use lowlight FV_min. Effect: Lower value will activate normal light fv_min at a brighter
    ///                condition.
    /// Range:         [0,500]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                              SWFVMinimumLuxTriggerLow;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFTuningSoftwareStatisticsTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixAFTuningSoftwareStatisticsTypeClass : public ParameterModule, public chromatixAFTuningSoftwareStatisticsType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 3;
    static const UINT16 MINOR = 4;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFTuningSoftwareStatisticsTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFTuningSoftwareStatisticsTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixAFTuningSoftwareStatisticsTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAFVFESoftwareIIRHighPassType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAFVFESoftwareIIRHighPassType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFVFESoftwareIIRHighPassType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAFVFESoftwareFIRHighPassType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAFVFESoftwareFIRHighPassType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFVFESoftwareFIRHighPassType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAFVFESoftwareHighPassType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAFVFESoftwareHighPassType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFVFESoftwareHighPassType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAFTuningSoftwareStatisticsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAFTuningSoftwareStatisticsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFTuningSoftwareStatisticsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFTuningSoftwareStatisticsType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load parameter_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadparameter_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFTuningSoftwareStatisticsType::parameter_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixAFTuningSoftwareStatisticsTypeClass

AFSOFTWARESTATELEMENTS_NAMESPACE_END
#endif // AFSOFTWARESTATELEMENTS_H

